package com.hsc.www.redis.jedisLettuce.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisClientPool {
    //服务器IP地址
    private static String ADDR = "106.12.180.184";
    //端口
    private static int PORT = 6379;
    //密码
    private static String AUTH = null;
    //连接实例的最大连接数,默认值也8
    private static int MAX_ACTIVE = 4;
    //资源池允许最大空闲连接数，默认值也是8。
    private static int MAX_IDLE = 2;
    //资源池允许最小空闲连接数，默认值是8。
    private static int MIN_IDLE = 1;
    //等待可用连接的最大时间，单位毫秒，默认值为-1，表示永不超时。
    //如果超过等待时间，则直接抛出JedisConnectionException
    private static int MAX_WAIT = -1;
    //连接超时的时间　　
    private static int TIMEOUT = 100000;
    //在获取一个jedis实例时，是否进行验证操作；如果为true，则jedis实例是可用的；
    private static boolean TEST_ON_BORROW = true;
    //数据库模式是16个数据库 0~15
    public static final int DEFAULT_DATABASE = 0;
    //初始化Redis连接池
    private static JedisPool jedisPool;

    static {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(MAX_ACTIVE);
        config.setMaxIdle(MAX_IDLE);
        config.setMinIdle(MIN_IDLE);
        config.setMaxWaitMillis(MAX_WAIT);
        config.setTestOnBorrow(TEST_ON_BORROW);
        jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH, DEFAULT_DATABASE);
    }
    /**
     * 借出 jedis
     */
    public static Jedis borrowJedis() {
        Jedis jedis = jedisPool.getResource();
        System.out.println("jedisHashCode=" + jedis.hashCode());
        return jedis;
    }
    /**
     * 归还 jedis
     */
    public static void returnJedis(Jedis jedis) {
        //如果使用的jedisPool来得到的jedis，那close操作不是关闭，而是归还给线程池.
        jedis.close();
    }
}
